//功能：每次按下按键则产生一个高电平脉冲，包含了按键除颤功能
/*
key_pulse u_key_pulse_0(
       .clk(),
		 .rst_n(),
		 .key(),
		 .pulse()
);
*/
module key_pulse(
       input clk,
		 input rst_n,
		 input [3:0] key,
		 output [3:0] pulse
);
wire [3:0] key_w;
//chuchan u_chuchan_0(
//       .clk50M(clk),
//		 .rst_n(rst_n),
//		 .k1(key[0]),
//		 .k2(key[1]),
//		 .k3(key[2]),
//		 .k4(key[3]),
//		 .k1_o(key_w[0]),
//		 .k2_o(key_w[1]),
//		 .k3_o(key_w[2]),
//		 .k4_o(key_w[3])
//		 );
key_debounce u_key_debounce_0(
    .sys_clk(clk),          //外部50M时钟
    .sys_rst_n(rst_n),        //外部复位信号，低有效
    
    .key(key[0]),              //外部按键输入
    .key_flag(),         //按键数据有效信号
	 .key_value(key_w[0])         //按键消抖后的数据  
    );
key_debounce u_key_debounce_1(
    .sys_clk(clk),          //外部50M时钟
    .sys_rst_n(rst_n),        //外部复位信号，低有效
    
    .key(key[1]),              //外部按键输入
    .key_flag(),         //按键数据有效信号
	 .key_value(key_w[1])         //按键消抖后的数据  
    );
key_debounce u_key_debounce_2(
    .sys_clk(clk),          //外部50M时钟
    .sys_rst_n(rst_n),        //外部复位信号，低有效
    
    .key(key[02]),              //外部按键输入
    .key_flag(),         //按键数据有效信号
	 .key_value(key_w[2])         //按键消抖后的数据  
    );
key_debounce u_key_debounce_3(
    .sys_clk(clk),          //外部50M时钟
    .sys_rst_n(rst_n),        //外部复位信号，低有效
    
    .key(key[3]),              //外部按键输入
    .key_flag(),         //按键数据有效信号
	 .key_value(key_w[3])         //按键消抖后的数据  
    );
down_edge_det u_down_edge_det_0(
       .clk(clk),
       .rst_n(rst_n),
		 .key0(key_w[0]),
		 .key1(key_w[1]),
		 .key2(key_w[2]),
		 .key3(key_w[3]),
		 .flag0(pulse[0]),
		 .flag1(pulse[1]),
		 .flag2(pulse[2]),
		 .flag3(pulse[3])
							);
endmodule 